package top.glkj.hms.utils;

import com.alibaba.fastjson.JSON;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import top.glkj.hms.config.JwtConfig;
import top.glkj.hms.entity.User;

import java.util.Date;

/**
 * JWT工具类
 *
 * @author zwq
 * @date 2020-04-04
 **/
@Slf4j
public class JwtTokenUtil {

    /**
     * 私有化构造器
     */
    private JwtTokenUtil() {
    }

    /**
     * 生成Token
     *
     * @param user
     * @return
     * @author zwq
     * @date 2020/4/4
     **/
    public static String createAccessToken(User user) {
        // 登陆成功生成JWT
        String token = Jwts.builder()
                // 放入用户名和用户ID
                .setId(user.getId() + "")
                // 主题
                .setSubject(user.getUsername())
                // 签发时间
                .setIssuedAt(new Date())
                // 签发者
                .setIssuer("xgl")
                // 自定义属性 放入用户拥有权限
                .claim("loginTime", JSON.toJSONString(new Date()))
                // 失效时间
                .setExpiration(new Date(System.currentTimeMillis() + JwtConfig.expiration))
                // 签名算法和密钥
                .signWith(SignatureAlgorithm.HS256, JwtConfig.secret)
                .compact();
        return token;
    }
}
